﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using DTO;
using BUS;

namespace QLNhanVien
{
    public partial class QuanLyNhanVien : Form
    {
        private NhanVienBUS m_NhanVienBUS = new NhanVienBUS();
        private int m_iNhanVienSelected = -1;

        public QuanLyNhanVien()
        {
            InitializeComponent();
        }

        //Load danh sách nhân viên:
        public void loadListNV()
        {
            try
            {
                List<NhanVienDTO> listNV = m_NhanVienBUS.GetListNV();

                if (listNV != null && listNV.Count > 0)
                {
                    btn_headerListNV.Text = string.Format("Danh sách nhân viên ({0})", listNV.Count);
                    lB_dsNV.DataSource = listNV;  
                }
                else
                {
                    lB_dsNV.Items.Add("Không có nhân viên nào !");
                    btn_headerListNV.Text = "Danh sách nhân viên";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Thông báo lỗi");
            }            
        }

        public void fillListNV(NhanVienDTO nv)
        {
            txt_manv.Text = nv.IMaNV.ToString();
            txt_Ten.Text = nv.STenNV;
            txt_NoiSinh.Text = nv.SNoiSinh;
            if (nv.BGioTinh)
                cb_GioiTinh.SelectedIndex = 0;
            else
                cb_GioiTinh.SelectedIndex = 1;
            dtp_ngaysinh.Value = nv.DNgaySinh;
        }

        public void setEditable(bool editable)
        {
            txt_Ten.ReadOnly = !editable;
            txt_NoiSinh.ReadOnly = !editable;
        }

        public void resetData()
        {
            txt_manv.Text = "Tự phát sinh";
            txt_Ten.Text = "";
            txt_NoiSinh.Text = "";
            dtp_ngaysinh.Value = new DateTime(1990, DateTime.Now.Month, DateTime.Now.Day);

            lB_dsNV.SelectedIndex = 0;
        }

        public void getNhanVienInfo(NhanVienDTO nhanvien)
        {
            nhanvien.STenNV = txt_Ten.Text.Trim();
            nhanvien.BGioTinh = cb_GioiTinh.SelectedIndex == 0;
            nhanvien.DNgaySinh = dtp_ngaysinh.Value;
            nhanvien.SNoiSinh = txt_NoiSinh.Text.Trim();
        }

        private void QuanLyNhanVien_Load(object sender, EventArgs e)
        {
            loadListNV();
            setEditable(false);
            btn_Huy.Enabled = false;
        }

        private void lB_dsNV_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (btn_Them.Text == "Lưu")
                return;
            try
            {
                List<NhanVienDTO> listNV = (List<NhanVienDTO>)lB_dsNV.DataSource;
                NhanVienDTO nhanvien = listNV[lB_dsNV.SelectedIndex];
                m_iNhanVienSelected = nhanvien.IMaNV;

                fillListNV(nhanvien);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message, "Thông báo");
            }
        }

        private void btn_Them_Click(object sender, EventArgs e)
        {
            if (txt_Ten.ReadOnly == true)
            {
                setEditable(true);
                btn_Them.Text = "Lưu";
                resetData();

                txt_Ten.Focus();

                btn_Xoa.Enabled = false;
                btn_Huy.Enabled = true;
            }
            else
            {
                NhanVienDTO nv = new NhanVienDTO();
                getNhanVienInfo(nv);
                try
                {
                    m_NhanVienBUS.InsertNV(nv);

                    btn_Them.Text = "Thêm";
                    setEditable(false);
                    btn_Xoa.Enabled = true;
                    btn_Huy.Enabled = false;

                    MessageBox.Show("Thêm mới nhân viên " + nv.STenNV + " thành công !", "Thông báo");

                    loadListNV();                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Thông báo lỗi");
                }
            }
        }

        private void btn_Xoa_Click(object sender, EventArgs e)
        {
            if (m_iNhanVienSelected >= 0)
            {
                try
                {
                    m_NhanVienBUS.DeleteNV(m_iNhanVienSelected);

                    MessageBox.Show("Xóa nhân viên mã số " + m_iNhanVienSelected.ToString() + " thành công", "Thông báo");

                    loadListNV();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Thông báo");
                }
            }
            else
            {
                MessageBox.Show("Xin chọn một nhân viên để xóa", "Thông báo");
            }
        }

        private void btn_Huy_Click(object sender, EventArgs e)
        {
            if (txt_Ten.ReadOnly == false)
            {
                resetData();
                btn_Xoa.Enabled = true;
                btn_Huy.Enabled = false;
                btn_Them.Text = "Thêm";

                setEditable(false);
            }
        }
    }
}
